<?php

namespace app\Home\controller;

// 让他去继承 TP 底层控制器
use think\Controller;

class Index extends Controller
{
    // 构造函数
    public function __construct()
    {
        // 先把父类的构造函数继承过来
        parent::__construct();
        $this->BusinessModel = model('Business.Business');
    }

    // 首页
    public function index()
    {
        // 加载模型
        $CategoryModel = model('Subject.Category');
        $SubjectModel = model('Subject.Subject');

        // 查询点赞量最多降序8个
        $toplist = $SubjectModel->orderRaw("LPAD(LOWER(likes), 10,0) DESC")->limit(5)->select();

        // 先查询出分类
        $cate = $CategoryModel->order('weight ASC')->select();

        // 重新组装
        $catelist = [];

        // 循环分类
        foreach($cate as $key=>$item)
        {
            // 查询课程
            $subject = $SubjectModel->where(['cateid' => $item['id']])->order('createtime DESC')->limit(8)->select();

            // 有课程才追加分类
            if($subject)
            {
                $catelist[] = [
                    'id' => $item['id'],
                    'name' => $item['name'],
                    'subject' => $subject
                ];
            }
        }

        // 赋值
        $this->view->assign([
            'catelist' => $catelist,
            'toplist' => $toplist
        ]);

        // 渲染模板
        return $this->view->fetch();
    }

    // 注册
    public function register()
    {
        //设置配置参数
        //临时关闭模板布局
        $this->view->engine->layout(false);

        // 先判断是否有post数据过来
        if ($this->request->isPost()) {
            // 1、接收密码 判断和确认密码是否一致
            // 2、生成密码盐，对密码进行加密
            // 3、组装数据，插入到数据库
            $mobile = $this->request->param('mobile', '', 'trim');
            $password = $this->request->param('password', '', 'trim');
            $repass = $this->request->param('repass', '', 'trim');

            if ($password != $repass) {
                $this->error('密码和确认密码不一致');
                exit;
            }

            // 生成密码盐
            $salt = build_ranstr();

            // 加密
            $password = md5($password . $salt);

            // 查询出云课堂这个渠道的id
            // 加载模型
            // 查询一条数据

            // 查询一条数据，哪个字段
            $sourceid = model('Business.Source')->where(['name' => '云课堂'])->value('id');

            // 组装数据
            $data = [
                'mobile' => $mobile,
                'password' => $password,
                'salt' => $salt,
                'deal' => 0, // 未成交
                'invitecode' => $salt, // 邀请码 小程序
                'sourceid' => $sourceid, // 客户来源渠道
            ];

            // 插入数据库 返回成功插入的条数 插入成功返回条数，失败返回false
            // 在插入之前 先用验证器对数据进行验证，验证通过了才会插入到数据库
            // 如果没有通过验证 会通过 getError()返回出 错误的文案信息
            $result = $this->BusinessModel->validate('common/Business/Business')->save($data);

            // 插入失败
            if ($result === false) {
                // 返回错误信息
                $this->error($this->BusinessModel->getError());
                exit;
            } else {
                // 插入成功，跳转到登录界面
                $this->success('注册成功，请登录', url('home/index/login'));
                exit;
            }
        }
        // 渲染模板
        return $this->view->fetch();
    }

    // 登录
    public function login()
    {
        //设置配置参数
        //临时关闭模板布局
        $this->view->engine->layout(false);


        // 判断是否有post提交
        if ($this->request->isPost()) {
            $mobile = $this->request->param('mobile', '', 'trim');
            $password = $this->request->param('password', '', 'trim');

            if (empty($mobile)) {
                $this->error('手机号码为空');
                exit;
            }

            if (empty($password)) {
                $this->error('密码为空');
                exit;
            }

            // 先根据手机号码查找数据
            $business = $this->BusinessModel->where(['mobile' => $mobile])->find();

            if (!$business) {
                $this->error('用户不存在');
                exit;
            }

            // 判断密码是否正确
            $salt = $business['salt'];
            $repass = md5($password . $salt);

            if ($repass != $business['password']) {
                $this->error('密码错误');
                exit;
            }

            // 将登录信息存放到cookie里面
            $data = [
                'id' => $business['id'],
                'mobile' => $business['mobile'],
                'nickname' => $business['nickname'],
                'avatar' => $business['avatar'],
            ];

            // 存放到cookie中
            cookie('LoginAuth', $data);

            // 登录成功
            $this->success('登录成功', url('/home/business/business/index'));
            exit;
        }
        // 渲染模板
        return $this->view->fetch();
    }

    // 退出
    public function logout()
    {
        // 删除cookie
        cookie('LoginAuth', null);
        $this->success('退出成功',url('/home/index/login'));
        exit;
    }
}
